import http from './http'
import Vue from "vue";

/**
 * 非结构化数据模块 API 方法集合
 */
const api = {
    /**
     * 上传音频文件
     * @param {FormData} formData - 包含音频文件的FormData对象
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    uploadAudioFile: (formData) => {
        return http.post('/unstructured/uploadAudio', formData, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }).catch(error => {
            console.error('上传音频文件失败:', error);
            throw error;
        });
    },

    /**
     * 分析音频文件
     * @param {Object} params - 分析参数
     * @param {String} params.fileId - 文件ID
     * @param {Array} params.analysisTypes - 分析类型数组，可包含：'speech'(语音分析), 'emotion'(情感分析), 'keyword'(关键词提取), 'content'(内容摘要)
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    analyzeAudioFile: (params) => {
        return http.post('/unstructured/analyzeAudio', params)
            .catch(error => {
                console.error('分析音频文件失败:', error);
                throw error;
            });
    },

    /**
     * 获取音频文件列表
     * @param {Object} params - 查询参数
     * @param {Number} params.pageNum - 页码
     * @param {Number} params.pageSize - 每页条数
     * @param {String} params.keyword - 搜索关键词
     * @param {String} params.timeRange - 时间范围
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getAudioFiles: (params) => {
        return http.get('/unstructured/getAudioFiles', params)
            .catch(error => {
                console.error('获取音频文件列表失败:', error);
                throw error;
            });
    },

    /**
     * 获取音频文件详情
     * @param {String} fileId - 文件ID
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getAudioFileDetail: (fileId) => {
        return http.get(`/unstructured/getAudioDetail?fileId=${fileId}`)
            .catch(error => {
                console.error('获取音频文件详情失败:', error);
                throw error;
            });
    },

    /**
     * 上传文本文件
     * @param {FormData} formData - 包含文本文件的FormData对象
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    uploadTextFile: (formData) => {
        return http.post('/unstructured/uploadText', formData, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }).catch(error => {
            console.error('上传文本文件失败:', error);
            throw error;
        });
    },

    /**
     * 上传视频文件
     * @param {FormData} formData - 包含视频文件的FormData对象
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    uploadVideoFile: (formData) => {
        return http.post('/unstructured/uploadVideo', formData, {
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }).catch(error => {
            console.error('上传视频文件失败:', error);
            throw error;
        });
    },

    /**
     * 分析文本文件
     * @param {Object} params - 分析参数
     * @param {String} params.fileId - 文件ID
     * @param {Array} params.analysisTypes - 分析类型数组，可包含：'sentiment'(情感分析), 'keywords'(关键词提取), 'summary'(内容摘要), 'theme'(主题分析)
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    analyzeTextFile: (params) => {
        return http.post('/unstructured/analyzeText', params)
            .catch(error => {
                console.error('分析文本文件失败:', error);
                throw error;
            });
    },

    /**
     * 获取文本文件列表
     * @param {Object} params - 查询参数
     * @param {Number} params.pageNum - 页码
     * @param {Number} params.pageSize - 每页条数
     * @param {String} params.keyword - 搜索关键词
     * @param {String} params.timeRange - 时间范围
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getTextFiles: (params) => {
        return http.get('/unstructured/getTextFiles', params)
            .catch(error => {
                console.error('获取文本文件列表失败:', error);
                throw error;
            });
    },

    /**
     * 获取文本文件详情
     * @param {String} fileId - 文件ID
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getTextFileDetail: (fileId) => {
        return http.get(`/unstructured/getTextDetail?fileId=${fileId}`)
            .catch(error => {
                console.error('获取文本文件详情失败:', error);
                throw error;
            });
    },

    /**
     * 筛选文本文件
     * @param {Object} params - 筛选参数
     * @param {String} params.unit - 单位
     * @param {String} params.class - 班级
     * @param {String} params.studentId - 学号
     * @param {String} params.major - 专业
     * @param {String} params.name - 姓名
     * @param {String} params.createTime - 创建时间
     * @param {String} params.theme - 主题
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    filterTextFiles: (params) => {
        return http.get('/unstructured/filterTextFiles', { params })
            .catch(error => {
                console.error('筛选文本文件失败:', error);
                throw error;
            });
    },

    /**
     * 提取文本内容
     * @param {String} fileId - 文件ID
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    extractTextContent: (fileId) => {
        return http.get(`/unstructured/extractTextContent?fileId=${fileId}`)
            .catch(error => {
                console.error('提取文本内容失败:', error);
                throw error;
            });
    },

    /**
     * 分析视频文件
     * @param {Object} params - 分析参数
     * @param {String} params.fileId - 文件ID
     * @param {String} params.type - 视频类型，可选值：'class'(上课状态), 'walk'(走路姿态), 'face'(人脸识别)
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    analyzeVideoFile: (params) => {
        return http.post('/unstructured/analyzeVideo', params)
            .catch(error => {
                console.error('分析视频文件失败:', error);
                throw error;
            });
    },

    /**
     * 获取视频文件列表
     * @param {Object} params - 查询参数
     * @param {Number} params.pageNum - 页码
     * @param {Number} params.pageSize - 每页条数
     * @param {String} params.keyword - 搜索关键词
     * @param {String} params.timeRange - 时间范围
     * @param {String} params.type - 视频类型，可选值：'class'(上课状态), 'walk'(走路姿态), 'face'(人脸识别)
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getVideoFiles: (params) => {
        return http.get('/unstructured/getVideoFiles', { params })
            .catch(error => {
                console.error('获取视频文件列表失败:', error);
                throw error;
            });
    },

    /**
     * 获取视频文件详情
     * @param {String} fileId - 文件ID
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getVideoFileDetail: (fileId) => {
        return http.get(`/unstructured/getVideoDetail?fileId=${fileId}`)
            .catch(error => {
                console.error('获取视频文件详情失败:', error);
                throw error;
            });
    },

    /**
     * 筛选视频数据
     * @param {Object} params - 筛选参数
     * @param {String} params.name - 人员姓名
     * @param {String} params.date - 日期
     * @param {String} params.type - 视频类型，可选值：'class'(上课状态), 'walk'(走路姿态), 'face'(人脸识别)
     * @param {Number} params.analysisScore - 分析结果分数
     * @param {Number} params.confidence - 置信度
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    filterVideoData: (params) => {
        return http.get('/unstructured/filterVideoData', { params })
            .catch(error => {
                console.error('筛选视频数据失败:', error);
                throw error;
            });
    },

    /**
     * 获取人脸识别数据
     * @param {String} videoId - 视频ID
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getFaceRecognitionData: (videoId) => {
        return http.get(`/unstructured/getFaceRecognitionData?videoId=${videoId}`)
            .catch(error => {
                console.error('获取人脸识别数据失败:', error);
                throw error;
            });
    },

    /**
     * 获取学生课堂参与分析数据
     * @param {String} videoId - 视频ID
     * @param {String} studentId - 学生ID
     * @returns {Promise} 返回一个 Promise 对象，包含请求结果
     */
    getClassParticipationData: (videoId, studentId) => {
        return http.get(`/unstructured/getClassParticipationData?videoId=${videoId}&studentId=${studentId}`)
            .catch(error => {
                console.error('获取学生课堂参与分析数据失败:', error);
                throw error;
            });
    }
};

// 将 API 方法挂载到 Vue 原型上
Vue.prototype.$unstructuredapi = api;

export default api;
